#include<stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <iostream>

// 静态顺序表

#define MAXSIZE 10
typedef int ElemType;  // 定义元素类型
typedef struct
{
   ElemType data[MAXSIZE];  // 定义表长度
   int length; // 当前长度
}SqList;

// 初始化
bool InitList(SqList &L){
    for(int i=0;i<MAXSIZE; i++) L.data[i]=0;
    L.length=0;
    return true;
}

// 插入
bool ListInsert(SqList &L, ElemType e, int loc){
    // 判断位置有效范围
    if (loc < 1 || loc > L.length+1) return false;
    // 判断空间是否溢出
    if (L.length >= MAXSIZE) return false;
    // 这个是元素往后移
    for(int i=L.length; i >= loc; i--)
        L.data[i] = L.data[i-1];
    L.data[loc-1] = e;
    L.length += 1;
    return true;
}

// 求表长
int Length(SqList L){
    return L.length;
}

// 按值查找位置
int LocateElem(SqList L, ElemType e){
    for(int i=0; i<L.length; i++){
        if (e==L.data[i]) return i;
    }
    return -1;
}

// 按位查找元素
ElemType GetElem(SqList L, int i){
    if (i < 1 || i > L.length+1) return -1;
    return L.data[i];
}

// 删除
bool ListDelete(SqList &L, int i, ElemType &e){
    // 判断位置有效范围
    if (i < 1 || i > L.length+1) return false;
    // 判断空间是否溢出
    if (L.length >= MAXSIZE) return false;
    // 传递将被删元素
    e = L.data[i-1];
    // 这个是元素往前移
    for(int j=i-1; j < L.length; j++)
        L.data[j] = L.data[j+1];
    L.length--;
    return true;
}

// 输出操作
void PrintList(SqList L){
    for(int i=0;i<MAXSIZE; i++){
        printf("%d;", L.data[i]);
    }
}

// 判空
bool Empty(SqList L){
    if (L.length==0) return true;
    else return false;
}

// 销毁
bool DestoryList(SqList &L){
    delete L.data;
    return true;
}

int main(){
    SqList L;
    ElemType e;
    InitList(L);
    ListInsert(L, 2, 1);
    ListInsert(L, 2, 2);
    ListInsert(L, 3, 2);
    ListInsert(L, 4, 2);
    ListInsert(L, 5, 2);
    ListInsert(L, 5, 2);
    ListInsert(L, 5, 2);
    ListInsert(L, 5, 2);
    PrintList(L);
    printf("\n");
    ListDelete(L, 2, e);
    PrintList(L);
    printf("\n");
    system("pause");
    return 0;
}